package com.jhy.suixianglu.daima20230213;

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

public class TopKFrequent {
    public int[] topKFrequent(int[] nums, int k) {

        // 声明一个int数组 我们作为放回值
        int[] res = new int[k];
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i : nums
        ) {
            hashMap.put(i, hashMap.getOrDefault(i, 0) + 1);
        }
        // 声明一个小根堆 剩余的是我们需要的 后面是实现comparetor接口的lambda简单写法 从小到大的顺序继续排列
        PriorityQueue<int[]> priorityQueue = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);

        for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()
        ) {
            // 如果当前元素小于了3我们直接加入
            if (priorityQueue.size() < 3) {
                priorityQueue.add(new int[]{entry.getKey(), entry.getValue()});
            } else {
                // 当大于了3的元素的时候，我们就进行判断 如果是大于了我们的堆顶元素了话，证明堆订元素可以删除了
                if (entry.getValue() > priorityQueue.peek()[1]) {
                    priorityQueue.poll();
                    priorityQueue.add(new int[]{entry.getKey(), entry.getValue()});
                }


            }
        }
        for (int i = res.length - 1; i >= 0; i--) {
            res[i] = priorityQueue.poll()[1];
        }
        return res;
    }
}
